package com.ccys.db.vo.app.callStandByScreen;

import com.ccys.db.vo.app.launchingTheApp.*;
import com.ccys.db.vo.app.splashscreen.AllergiesMakeVo;
import com.ccys.db.vo.app.splashscreen.MedicationReactionsMakeVo;
import com.ccys.db.vo.app.splashscreen.SymptomMakeVo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @program: WhiteCoat
 * @description: GetBookingDetail返回数据Vo
 * @author: ZhangJingCan
 * @create: 2024-01-22 11:02
 **/

@Data
public class GetBookingDetailVo {

    private String id;

    private String code;

    @JsonProperty("created_on")
    private Date createdOn;

    /**
     * 这个age返回的字符串
     */
    private String age;

    /**
     * 这个状态返回的字符串"Paid"
     */
    private String status;

    @JsonProperty("status_value")
    private Integer statusValue;

    @JsonProperty("sub_status_value")
    private Integer subStatusValue;

    @JsonProperty("sub_status")
    private String subStatus;

    @JsonProperty("is_deleted")
    private Boolean isDeleted;

    /**
     * 返回的字符串的"True"
     */
    @JsonProperty("booking_is_delivery")
    private String bookingIsDelivery;

    /**
     * 返回的字符串的"False"
     */
    @JsonProperty("is_reset_medication")
    private String isResetMedication;

    /**
     * 是否允许促销代码
     */
    @JsonProperty("allow_promo_code")
    private Boolean allowPromoCode;

    /**
     * 是否显示收据
     */
    @JsonProperty("show_receipt")
    private Boolean showReceipt;

    /**
     * 货币符号"$"
     */
    private String currency;

    /**
     * 是否允许更改送货时间段的地址？
     */
    @JsonProperty("is_allow_change_timeslot_address")
    private Boolean isAllowChangeTimeslotAddress;

    /**
     * 是否显示预定时间段？
     */
    @JsonProperty("is_show_book_time_slot")
    private Boolean isShowBookTimeSlot;

    /**
     * 是否请求上传文件
     */
    @JsonProperty("is_request_upload_file")
    private Boolean isRequestUploadFile;

    /**
     * 是否输入促销代码
     */
    @JsonProperty("is_input_promo_code")
    private Boolean isInputPromoCode;

    /**
     * 是否咨询结束时间超过24小时？
     */
    @JsonProperty("consult_ended_more_than_24_hour")
    private Boolean consultEndedMoreThan24Hour;

    /**
     * 类型，对方返回："Self"
     */
    private String type;

    /**
     * 是否检查AIA标识符
     */
    @JsonProperty("aia_identifier_checked")
    private Boolean aiaIdentifierChecked;

    /**
     * 备忘录邮件
     */
    @JsonProperty("memo_email")
    private String memoEmail;

    /**
     * 日志日期
     */
    @JsonProperty("log_date")
    private String log_date;

    /**
     * 患者所在国家 - 对方返回的是数字类型的ID
     * 我们项目中存放的id为字符串
     */
    @JsonProperty("patient_country_of_residence")
    private String patientCountryOfResidence;

    /**
     * 医生所在国家，对方返回数字类型ID，我们项目中存放的ID为字符串
     */
    @JsonProperty("doctor_country_of_residence")
    private String doctorCountryOfResidence;

    /**
     * 是否显示过程
     */
    @JsonProperty("show_process")
    private Boolean showProcess;

    /**
     * 预定国家备注？
     */
    @JsonProperty("booking_country_remark")
    private String bookingCountryRemark;

    /**
     * 药物标题
     */
    @JsonProperty("medication_header")
    private String medicationHeader;

    /**
     * 是否重新激活咨询？对方返回数字0
     */
    @JsonProperty("reactivate_consult")
    private Integer reactivateConsult;

    /**
     * 预约咨询类型，对方返回数字类型的1
     */
    @JsonProperty("booking_consultation_type")
    private Integer bookingConsultationType;

    /**
     * 咨询类型，对方返回："General Consultation"
     */
    @JsonProperty("consultation_type")
    private String consultationType;

    /**
     * 是否免收就诊费
     */
    @JsonProperty("is_waive_consultation_fee")
    private Boolean isWaiveConsultationFee;

    /**
     * 免收掉的就诊费
     */
    @JsonProperty("waive_consultation_fee")
    private BigDecimal waiveConsultationFee;

    /**
     * 是否免收快递费
     */
    @JsonProperty("is_waive_delivery_fee")
    private String isWaiveDeliveryFee;

    /**
     * 是否免收药费
     */
    @JsonProperty("is_waive_medication_fee")
    private String isWaiveMedicationFee;

    /**
     * 免收掉的药费金额
     */
    @JsonProperty("waive_medication_fee")
    private BigDecimal waiveMedicationFee;

    /**
     * 是否免收practice 费用
     * waive_practice_fee_flag - booking_fee表
     */
    @JsonProperty("is_waive_practice_fee")
    private Boolean isWaivePracticeFee;

    /**
     * 免收咨询费的理由
     */
    @JsonProperty("waive_consultation_reason")
    private String waiveConsultationReason;

    /**
     * 咨询总金额
     */
    @JsonProperty("total_cost_consulation")
    private BigDecimal totalCostConsulation;

    /**
     * 打折之后的咨询总金额
     */
    @JsonProperty("total_cost_consulation_after_discount")
    private BigDecimal totalCostConsulationAfterDiscount;

    /**
     * 附加费用
     */
    @JsonProperty("surcharge_fee")
    private BigDecimal surchargeFee;

    /**
     * 是否免收医疗服务费用
     */
    @JsonProperty("is_waive_medical_service")
    private Boolean isWaiveMedicalService;

    /**
     * 免收医疗服务费的理由
     */
    @JsonProperty("waive_medical_service_reason")
    private String waiveMedicalServiceReason;

    /**
     * 免收掉的医疗服务费用金额
     */
    @JsonProperty("waive_medical_service_fee")
    private BigDecimal waiveMedicalServiceFee;

    /**
     * 医疗服务费用小计
     */
    @JsonProperty("subtotal_cost_medical_service")
    private BigDecimal subtotalCostMedicalService;

    /**
     * 处方总费用
     */
    @JsonProperty("total_cost_prescription")
    private BigDecimal totalCostPrescription;

    /**
     * 科室ID - 对方返回的数字类型的值，我们项目的ID是字符串。
     */
    @JsonProperty("specialisation_id")
    private String specialisationId;

    /**
     * 医生是否准备好？
     */
    @JsonProperty("is_doctor_ready")
    private Boolean isDoctorReady;

    /**
     * 患者是否准备好？
     */
    @JsonProperty("is_patient_ready")
    private Boolean isPatientReady;

    /**
     * 快递费用
     */
    @JsonProperty("delivery_fee")
    private BigDecimal deliveryFee;

    /**
     * 合伙公司
     * 和UpdateResetMedicationVo那边一样
     */
    @JsonProperty("partner_company")
    private PartnerCompanyMakeVo partnerCompany;

    /**
     * 是否为诊所医生？
     */
    @JsonProperty("is_clinic_whitecoat")
    private Boolean isClinicWhitecoat;

    /**
     * 医生诊所的logo
     */
    @JsonProperty("doctor_clinic_logo")
    private String doctorClinicLogo;

    /**
     * 医生诊所地址
     */
    @JsonProperty("doctor_clinic_address")
    private String doctorClinicAddress;

    /**
     * 重新安排或者取消政策？
     * 和UpdateResetMedicationVo那边一样
     */
    @JsonProperty("reschedule_or_cancel_policy")
    private String rescheduleOrCancelPolicy;

    /**
     * 伙伴关系？
     * 和UpdateResetMedicationVo那边一样
     */
    private PartnershipMakeVo partnership;

    /**
     * 运费明细？
     * todo:
     * 和UpdateResetMedicationVo那边一样
     */
    @JsonProperty("delivery_fee_detail")
    private DeliveryFeeDetailMakeVo deliveryFeeDetail;

    /**
     * 是否有附加费用
     */
    @JsonProperty("is_surcharge_fee")
    private Boolean isSurchargeFee;

    /**
     * todo
     */
    @JsonProperty("practice_fee")
    private BigDecimal practiceFee;

    /**
     * 总计费用
     */
    @JsonProperty("grand_total")
    private BigDecimal grandTotal;

    /**
     * 税明细？
     * todo
     */
    private TaxMakeVo tax;

    /**
     * 含税总金额
     */
    @JsonProperty("grand_total_included_tax")
    private BigDecimal grandTotalIncludedTax;

    /**
     * 总付款金额
     */
    @JsonProperty("grand_total_payment")
    private BigDecimal grandTotalPayment;

    /**
     * 问诊开始时间
     */
    @JsonProperty("consultant_begin_date")
    private Date consultantBeginDate;

    /**
     * 问诊结束时间
     */
    @JsonProperty("consultant_end_date")
    private Date consultantEndDate;

    /**
     * 是否需要转介绍信？
     */
    @JsonProperty("need_medical_letter")
    private Boolean needMedicalLetter;

    /**
     * 医疗代码？
     */
    @JsonProperty("medical_letter_code")
    private String medicalLetterCode;

    /**
     * 医疗信函？邮件？
     */
    @JsonProperty("medical_letter")
    private String medicalLetter;

    /**
     * 是否需要转介绍信
     */
    @JsonProperty("need_medical_certification")
    private Boolean needMedicalCertification;

    /**
     * 转介绍信编号
     */
    @JsonProperty("medical_certification_code")
    private String medicalCertificationCode;

    /**
     * 医疗证明开始日期 "2020-07-31T00:00:00"
     */
    @JsonProperty("medical_certification_begin_date")
    private Date medicalCertificationBeginDate;

    /**
     * 医疗证明结束日期 "2020-08-02T00:00:00"
     */
    @JsonProperty("medical_certification_end_date")
    private Date medicalCertificationEndDate;

    /**
     * 医疗证明附加说明
     */
    @JsonProperty("medical_certification_additional_note")
    private String medicalCertificationAdditionalNote;

    /**
     * 医疗证明地址
     */
    @JsonProperty("medical_letter_url")
    private String medicalLetterUrl;

    /**
     * 诊断  "Paratyphoid fever C"
     */
    private String diagnosis;

    /**
     * 标记病人ID
     */
    @JsonProperty("flag_patient_id")
    private String flagPatientId;

    /**
     * 标记病人备注
     */
    @JsonProperty("flag_patient_note")
    private String flagPatientNote;

    /**
     * 提出投诉
     */
    @JsonProperty("presenting_complaint")
    private String presentingComplaint;

    /**
     * 管理
     */
    private String management;

    /**
     * 给病人的指示
     */
    @JsonProperty("instructions_to_patient")
    private String instructionsToPatient;

    /**
     * todo 这是啥？
     */
    @JsonProperty("twilio_room")
    private String twilioRoom;

    /**
     * 孩子 todo 这里不知道数据类型以及返回具体参数
     */
    private String child;

    /**
     * 二维码地址
     */
    @JsonProperty("QR_code")
    private String QRCode;

    /**
     * PIN码 todo
     */
    @JsonProperty("pin_code")
    private String pinCode;

    /**
     * 是否显示备忘录
     */
    @JsonProperty("show_memo")
    private Boolean show_memo;

    /**
     * 备忘录内容
     */
    private String memo;

    /**
     * 备忘录附件？todo 这里不知道数据类型以及具体内容 - 看名称像是url地址集合？
     */
    @JsonProperty("memo_attached_files")
    private String memoAttachedFiles;

    /**
     * 患者位置？
     */
    @JsonProperty("patient_location")
    private String patientLocation;

    /**
     * 患者所在诊所名称
     */
    @JsonProperty("patient_clinic_name")
    private String patientClinicName;

    /**
     * 患者签名 todo 这里不知道具体返回类型和返回值 - 猜测为患者签名图片url地址？
     */
    @JsonProperty("patient_signature")
    private String patientSignature;

    /**
     * 患者详细信息
     */
    private LockedPatientInfoMakeVo lockedPatientInfo;

    /**
     * 锁定孩子的信息？ todo 需要确定字段类型以及具体返回值
     */
    private String lockedChildInfo;

    /**
     * 队列编号
     */
    @JsonProperty("queue_no")
    private Integer queue_no;

    /**
     * 等待时间 - 对方返回空字符串 todo 这里需要确定具体值
     */
    @JsonProperty("waiting_time")
    private String waitingTime;

    /**
     * 总共咨询？todo
     */
    @JsonProperty("total_consulation")
    private Integer totalConsulation;

    /**
     * 反馈？ 对方返回字符串 todo "false"
     */
    private String feedback;

    /**
     * todo 好几个表都存在这个字段 需要确定取哪个表
     */
    private Boolean G6PD;

    /**
     * 是否怀孕
     */
    private Boolean pregnant;

    /**
     * 是否为AIA会员
     */
    @JsonProperty("aia_member")
    private Boolean aiaMember;

    /**
     * AIA标识符
     */
    @JsonProperty("aia_identifier")
    private String aiaIdentifier;

    /**
     * 总计
     */
    @JsonProperty("sum_grand_total")
    private BigDecimal sumGrandTotal;

    /**
     * 总税费
     */
    @JsonProperty("sum_grand_total")
    private BigDecimal sumTaxFee;

    /**
     * 总计(含税)
     */
    @JsonProperty("sum_grand_total")
    private BigDecimal sumGrandTotalIncludedTax;

    /**
     * 专科医生信息
     */
    private SpecialistMakeVo specialist;

    /**
     * 快递类型，对方返回字符串："Deliver"
     */
    @JsonProperty("delivery_type")
    private String deliveryType;

    /**
     * 快递地址集合
     */
    @JsonProperty("delivery_address")
    private List<DeliveryAddressMakeVo> deliveryAddress;

    /**
     * 药房信息集合
     */
    private List<PharmacyMakeVo> pharmacy;

    /**
     * 药房地址，对方返回："201 Henderson Road | WhiteCoat Pharmacy | Singapore 159545 | T: +65 6909 6609 | E: pharmacy@whitecoat.global"
     */
    @JsonProperty("pharmacy_address")
    private String pharmacyAddress;

    /**
     * 医生信息
     */
    private DoctorMakeVo doctor;

    /**
     * 快递详情 todo 对方返回null 需要确定类型和具体返回内容
     */
    @JsonProperty("delivery_info")
    private String deliveryInfo;

    /**
     * 送达类型
     * booking表？
     */
    @JsonProperty("express_type")
    private Integer expressType;

    /**
     * 司机注意内容
     */
    @JsonProperty("note_to_driver")
    private String noteToDriver;

    /**
     * 授权人姓名，todo 对方返回为null 这里是字符串的某个人名？
     */
    @JsonProperty("authorised_person_name")
    private String authorisedPersonName;

    /**
     * 授权人员识别信息？ todo 对方返回null 需要确认 类型和返回值
     */
    @JsonProperty("authorised_person_identification")
    private String authorisedPersonIdentification;

    /**
     * 授权人电话 todo
     */
    @JsonProperty("authorised_person_phone")
    private String authorised_person_phone;

    /**
     * 授权人国家ID todo
     */
    @JsonProperty("authorised_person_country_id")
    private String authorisedPersonCountryId;

    /**
     * 药物包装照片集合 todo 需要确认具体返回值 对方返回的空集合
     */
    @JsonProperty("medication_package_photos")
    private String medicationPackagePhotos;

    /**
     * 付款信息
     */
    private PaymentMakeVo payment;

    /**
     * 配置文件类型ID todo
     * tbl_country_service_type_profile_type 这个表？
     */
    @JsonProperty("profile_type_id")
    private String profileTypeId;

    /**
     * AIA企业？ todo 需要确认返回类型以及返回值
     */
    @JsonProperty("aia_corporate")
    private String aiaCorporate;

    /**
     * 优惠卷折扣信息
     */
    @JsonProperty("bin_discount")
    private BinDiscountMakeVo binDiscount;

    /**
     * 患者收据标签 todo 返回为null  需要确认
     */
    @JsonProperty("patient_receipt_label")
    private String patientReceiptLabel;

    /**
     * 预定CDMP费用？ todo 对方返回null
     */
    @JsonProperty("booking_cdmp_fee")
    private BigDecimal bookingCdmpFee;

    /**
     * 推荐阅读？ todo 对方返回null
     */
    @JsonProperty("recommend_reading")
    private String recommendReading;

    /**
     * 上传文件 todo 对方返回为null 需要确认返回类型和返回值
     */
    @JsonProperty("upload_files")
    private String uploadFiles;

    /**
     * 添加药物价格
     */
    @JsonProperty("addition_meds_price")
    private BigDecimal addition_meds_price;

    /**
     * AIA咨询费
     */
    @JsonProperty("aia_zero_consult_fee")
    private Boolean aiaZeroConsultFee;

    /**
     * 是否在收据显示诊断
     */
    @JsonProperty("is_show_diagnosis_on_receipt")
    private Boolean isShowDiagnosisOnReceipt;

    /**
     * 是否已注册CDMP
     */
    @JsonProperty("is_enrolled_to_cdmp")
    private Boolean isEnrolledToCdmp;

    /**
     * 企业？ todo 对方返回null 需要确认类型和具体返回值
     */
    private String corporate;

    /**
     * 订阅？ todo 对方返回null 需要确认返回类型和返回值
     */
    private String subscription;

    /**
     * 症状集合
     * 注意这里只需要取name一个字段就行
     */
    private List<SymptomMakeVo> symptoms;//查询tbl_symptom 表所有，未删除数据

    /**
     * 症状照片 todo 对方返回null 猜测这里可能是症状图片集合，需要确认具体类型和具体返回值
     */
    @JsonProperty("symptoms_photos")
    private String symptomsPhotos;

    /**
     * 教育集合 todo 需要确认具体返回数据值 - 这里对方返回的是空集合
     */
    private String medications;

    /**
     * 过敏症状
     * 参考GetProfile怎么取的
     */
    private List<AllergiesMakeVo> allergies;

    /**
     * 药物反应
     * 参考GetProfile怎么取的
     */
    @JsonProperty("medication_reactions")
    private List<MedicationReactionsMakeVo> medicationReactions;

    /**
     * 处方集合
     */
    private List<PrescriptionMakeVo> prescription;

    /**
     * 是否获得批准 todo
     */
    @JsonProperty("is_approved")
    private Boolean isApproved;

    /**
     * 显示为星号？ todo
     */
    @JsonProperty("is_show_asterisk")
    private Boolean isShowAsterisk;

    /**
     * 包装处方集合？ todo 对方返回空集合 需要确认具体返回什么值
     */
    @JsonProperty("package_prescription")
    private String packagePrescription;

    /**
     * 医疗服务套餐 todo 对方返回空集合
     */
    @JsonProperty("package_medical_service")
    private String packageMedicalService;

    /**
     * 处方套餐费用小计 todo
     */
    @JsonProperty("subtotal_cost_package_prescription")
    private BigDecimal subtotalCostPackagePrescription;

    /**
     * 医疗服务套餐费用小计
     */
    @JsonProperty("subtotal_cost_package_medical_service")
    private BigDecimal subtotalCostPackageMedicalService;

    /**
     * 服务费用总折扣金额？ todo
     */
    @JsonProperty("service_bin_total_discount_amount")
    private BigDecimal serviceBinTotalDiscountAmount;

    /**
     * CDMP包装 todo 对方返回null 需要确认具体类型和返回值
     */
    @JsonProperty("cdmp_package")
    private String cdmpPackage;

    /**
     * 医疗服务集合？ todo 对方返回空集合
     */
    @JsonProperty("medical_service")
    private String medicalService;

    /**
     * 医疗服务类型 todo
     */
    @JsonProperty("medical_service_type")
    private MedicalServiceTypeMakeVo medicalServiceType;

    /**
     * 药物照片？todo 返回为null 需要确认
     */
    @JsonProperty("medicine_collected_photo")
    private String medicineCollectedPhoto;

    /**
     * 深度链接详情 todo 返回为null 需要确认
     */
    @JsonProperty("deeplink_detail")
    private String deeplinkDetail;

    /**
     * 预约的孩子详细信息 todo 返回为null 需要确认
     */
    @JsonProperty("booking_child_detail")
    private String bookingChildDetail;

    /**
     * 事务日志 todo 返回空集合 需要确认具体返回值
     */
    @JsonProperty("log_transactions")
    private String logTransactions;

    /**
     * 转介绍信息 todo
     */
    private List<ReferralsMakeVo> referrals;

    /**
     * 付款方式，todo 对方返回空字符串
     */
    @JsonProperty("payment_method")
    private String paymentMethod;

    /**
     * 配置文件是否更新 todo
     */
    @JsonProperty("is_profile_updated")
    private Boolean isProfileUpdated;

    /**
     * 是否下次继续问诊？ todo
     */
    @JsonProperty("is_next_appointment")
    private Boolean isNextAppointment;

    /**
     * 推荐预约？ 返回为null 猜测为boolean类型 todo
     */
    @JsonProperty("recommend_appointment")
    private Boolean recommendAppointment;

}
